//
//  NSObject+kz_global.h
//  KZTools_ObjectC
//
//  Created by 朱凯 on 2018/11/26.
//  Copyright © 2018年 zhukai. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSObject (kz_global)

/**
 自定义description适用于哪些类，用[NSObject jk_descriptionApplyTo:@[...]]，在appdelegate中调用配置

 @param classes 需要适配的类数组，其子类同样适用
 */
+ (void)kz_descriptionApplyTo:(NSArray<Class> *)classes;

/**
 系统的 performSelector 不支持参数或返回值为非对象的 selector 的调用，所以增加了对应的方法，支持对象和非对象返回的 selector。

 @param selector 要被调用的方法名
 @param returnValue selector 的返回值的指针地址
 @param args 参数数组
 */
- (void)kz_performSelector:(SEL)selector returnValue:(void *)returnValue argsFromArray:(NSArray *)args;

/**
 使用 block 遍历当前实例的所有方法，父类的方法不包含在内

 @param block 实现回调
 */
- (void)kz_enumrateInstanceMethodsUsingBlock:(void (^)(SEL selector))block;

/**
 使用 block 遍历指定的某个类的实例方法，其父类方法不包含在内

 @param aClass 类
 @param block 实现回调
 */
+ (void)kz_enumrateInstanceMethodsOfClass:(Class)aClass usingBlock:(void (^)(SEL selector))block;


@end
